#pragma once

#include "Task.h"

#include <chrono>

namespace threadpool {

    class TimedTask : public Task {

    public:

        /**
          * @brief  根据指定的任务函数、延迟时间和优先级创建定时任务
          * @param  priority 优先级
          * @param  delay    延迟时间
          * @param  func     任务函数
          */
        TimedTask(int priority, std::chrono::milliseconds delay, std::function<void()> func) :
                Task(priority, std::move(func)), delay_(delay) {}

        std::string getType() const override { return "TimedTask"; }

        /**
          * @brief  获取延迟时间
          * @retval 延迟时间
          */
        std::chrono::milliseconds getDelay() const { return delay_; }

        /**
          * @brief  设置延迟时间
          * @note   如果定时任务已经开始计时，则该函数设置不会生效
          * @param  delay 延迟时间
          */
        void setDelay(std::chrono::milliseconds delay) { delay_ = delay; }

    private:

        // 延迟时间
        std::chrono::milliseconds delay_;

    };

}